package com.sxj.corejava.code07_面向对象.bms;

/**
 * @author 石小俊
 * @date 2024年03月26日 18:55
 */
public class Bank {

    // 存储所有的账户信息
    // 存放所有储户的信息的数组,每一个储户对应一个Account对象
    static Account[] accounts = new Account[100];
    // 表示当前已开户的数量
    static int count = 0;


    /**
     * 开户
     * 用户填写的账户信息,传递给银行
     * 由银行进行开户的实现
     * @param account 用户填写的账户信息
     * @return 开户是否成功
     */
    public static boolean register(Account account) {
        if (count < accounts.length) {
            accounts[count++] = account;
            return true;
        }
        return false;
    }

    /**
     * 账户登录
     * 由用户填写卡号与密码,传递给银行
     * 由银行判断用户输入的卡号与密码是否正常
     * 如果成功则返回对应的账户信息
     * 如果失败则直接返回null即可
     * @param id       卡号
     * @param password 密码
     * @return 登录的用户
     */
    public static Account login(int id, String password) {
        // 查询数组中是否存在与当前传递的卡号和密码一致的账户
        // 如果存在,则说明卡号与密码正确,否则不正确
        // 遍历数组中所有的账户信息,判断卡号与密码是否存在一致的
        for (Account account : accounts) {
            if (account.getId() == id && password.equals(account.getPassword())) {
                // 如果存在一致的,则说明当前卡号与密码正确,登录成功
                // 返回与卡号和密码一致的账户
                return account;
            }
        }
        // 如果遍历完数组之后,还是没有找到一致的
        // 说明卡号或者密码错误,没有查询到数据,直接返回null
        return null;
    }

    /**
     * 根据卡号查找对应的账户信息
     * @param id
     * @return
     */
    public static Account findById(int id) {
        // 遍历所有已经开户的账户信息
        for(int i = 0; i < count; i++){
            // 根据卡号找到对应账户
            if(accounts[i].getId() == id){
                return accounts[i];
            }
        }
        return null;
    }
}
